### Бинарные деревья поиска II
1. Дополните интерфейс шаблона класса бинарного дерева поиска:
```cpp
class BinarySearchTree
{
  public:
    ...
    template< typename F >
    F traverse_lnr(F f) const
    {
      ...
      return f;
    }
    template< typename F >
    F traverse_rnl(F f) const
    {
      ...
      return f;
    }
    template< typename F >
    F traverse_breadth(F f) const
    {
      ...
      return f;
    }
};
```
Реализуйте инфиксные обходы дерева (слева направо и справо налево), а также обход дерева в
ширину. Во время обхода над элементами дерева (парой <ключ-значеие>) должна выполняться
операция обхода, передаваемая в виде функционального объекта.

• Пример функционального объекта, подходящего для обхода дерева:
```cpp
struct Key_summ
{
  void operator()(const std::pair< const int, std::string > & key_value)
  {
    result += key_value.first;
  }
  int result_ = 0;
};
```
Использование такого функционального объекта позволяет посчитать сумму ключей в дереве
типа ```BinarySearchTree< int, std::string, ... >```.

• Реализация обходов должна быть выполнена итеративно с использованием ранее реализованных шаблонов классов «Стек» и «Очередь»

3. Работа должна быть выполнена в виде 1-го исполняемого файла, принимающего параметры следующим образом:
```bash
$ ./lab [ascending|descending|breadth] filename
```

• Все параметры обязательные. ```ascending```, ```descending``` или ```breadth``` указывает напрвление обхода дерева, которое будет построено в процессе работы программы. Данные дерева должны
содержаться в файле с именем ```filename```.

• Данные для дерева в файле ```filename``` имеют следующий вид:
```txt
key1 value1 key2 value2 key3 value3 ...
```
Например:
```
10 keyboard 12 monitor -5 mouse
```

• Программа должна выполнить обход дерева по указанному направлению и сформировать на
выходе строку, состояющую из значений, разделённых пробелами. Порядок значений определяется направлением обхода. Например, для представленного примера, если обойти дерево по
возрастанию, то результат должен быть следующий:
```txt
mouse keyboard monitor
```

• Для пустого дерева выводится ```<EMPTY>```.
